package com.swak.algs;

import com.swak.algs.array.Prints;
import com.swak.algs.sample.Samples;

/**
 * 数组中有 一个数出现 K次，其他数出现M次， K < M, M !=1;
 * 
 * @author lifeng
 */
public class Code20 {

	static int findNum(int[] ans, int m) {

		/*
		 * 累计每位的和： 其实就是累计为1的数的多少
		 */
		int[] nums = new int[32];

		/*
		 * 2 出现1次 其他数出现2次
		 */
		for (int i = 0; i < ans.length; i++) {
			for (int j = 0; j <= 31; j++) {
				nums[j] += ans[i] >> j & 1;
			}
		}

		/*
		 * 出现k 的数的二进制数
		 */
		int num = 0;
		for (int i = 0; i < nums.length; i++) {
			num = num | (nums[i] % m == 0 ? 0 : 1) << i;
		}

		return num;
	}

	public static void main(String[] args) {
		int kMax = 10;
		int mMax = 10;
		int maxKinds = 5;
		int max = 20;
		int[] ans = Samples.kAndMKindsRandomSample(kMax, mMax, maxKinds, max);
		Prints.print(ans);
	}
}